package main

import "fmt"

func main() {
	var a = 100
	b := &a
	// b++ // 这里b是指向a的指针，++操作会导致编译错误，因为指针不能直接自增
	fmt.Println(&a, b, &a == b, *b, a, *b == a) // 输出变量a的地址，b的地址和b指向的值
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~")

	var d = a
	fmt.Println(a == d, &a == &d)
	fmt.Printf("%p %p\n", &a, &d) // 输出变量a和d的地址，注意这里d是a的值拷贝，所以地址不同

	var p *int // 没有初始化零值
	fmt.Printf("%T %[1]v\n", p)
	p = &a // 现在p指向a的地址
	fmt.Printf("%T %[1]v\n", p)
	fmt.Println(*b, *p) // 输出p指向的值，即a的值
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~")
	*p = 111 // 通过房间号码找到房间，覆盖内容
	fmt.Printf("%T %[1]v\n", p)
	fmt.Println(a, *b, *p) // 输出p指向的值，即a的值
}
